[AWS] ALBのIPターゲットをLightsailインスタンスで活用する
こんにちは、菊池です。
ALB(Application Load Balancer)が、IPアドレスターゲットに対応しました。
VPC内のEC2インスタンス以外のリソースを指定可能になり、ALBの活用の幅が広がります。その一例としてAmazon Lightsailでの利用方法を紹介します。
Lightsailでの活用
Amazon LightsailはAWSのVPS(Virtual Private Server)サービスで、EC2に比べてシンプルな操作、料金体系で利用することが可能です。
Lightsailのインスタンスは、設定上不可視なVPC内に起動しますが、VPC Peeringを有効化することでデフォルトVPCとプライベート接続することが可能です。
VPC Peeringすることで、デフォルトVPCからLightsailインスタンスへプライベートIPで到達可能になりますので、ALBのターゲットに指定することが可能です。
これにより、Lightsail単体ではできなかった、以下の機能を利用することが可能になります。
- マルチAZ構成での冗長化・負荷分散
- SSL終端のオフロード
- AWS Certificate Managerによる無料SSL証明書の利用
- AWS WAF/Shieldの利用
負荷分散以外のメリットについては以下の記事も参照ください。
やってみる
では、実際にマルチAZ構成のALB + Lightsailの環境を作成してみます。
Lightsailのコンソールから、インスタンスを作成します。
Lightsailでも、AZの指定が可能です。以下の画面では、Tokyoリージョン、AZ-A(ap-northeast-1a)が選択されています。変更する場合は、[Change Region and Zone]を選びます。
リージョンを選び、AZも変更する場合には[Change Availability Zone]を選択します。
通常のEC2などと同様に、AZが選択可能です。
イメージは、Amazon Linuxを選択しました。
インスタンス起動時に、Apache(httpd)のインストール/起動を実行します。[Add launch script]から、EC2のユーザーデータと同様に任意のスクリプトを実行できます。
今回実行したスクリプトは以下です。
#!/bin/bash yum install -y httpd # httpdインストール chkconfig httpd on # 自動起動を有効 service httpd start # httpd起動 echo "Lightsail az-a" > /var/www/html/index.html # テストページを作成 iptables -A INPUT -p tcp -s 172.31.0.0/16 --dport 80 -j ACCEPT # iptablesでデフォルトVPCからのhttpを許可 iptables -A INPUT -p tcp --dport 80 -j DROP # 上記以外からのhttpを拒否 service iptables save # iptablesを保存
Lightsailでは、Firewall設定でポートの許可/拒否が可能ですが、ソースIPでの制限はできません。今回はALB経由のみを許可し、インターネットから直接のアクセスは禁止したいため、iptablesを使って制限しています。
同様に、AZ-Cにもインスタンスを作成します。
インスタンスが起動できたら、ブライベートIPを確認しましょう。インスタンスを選択すると遷移する、インスタンス個別の画面で、割り当てられたプライベートIPが確認できます。
2つのLightsailインスタンスのプライベートIPを、ALBのターゲットグループに登録します。
問題なければ、両方ともhealtyステータスになるはずです。
ちなみに、ALBのリスナーはACM(Amazon Certificate Manager)の証明書を使ってHTTPSにしました。アクセスすると、ALB経由でLightsailのページが確認できました。
まとめ
IPアドレスターゲットの活用方法の1つとして、LightsailをマルチAZ構成にしてみました。
もともと、Ligthsailは拡張が見込まれる環境には向いていませんが、Lightsailを使っていて負荷が多くなってきたケースなど、EC2への移行までの一時的な対応として使えるのではないでしょうか。